/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package br.com.guaraba.patrimonio.controller;

/**
 *
 * @author marcelo
 */

import br.com.guaraba.patrimonio.controller.util.JsfUtil;
import br.com.guaraba.patrimonio.facade.CategoriaFacade;
import br.com.guaraba.patrimonio.facade.InstituicaoFacade;
import br.com.guaraba.patrimonio.facade.LugarFacade;
import br.com.guaraba.patrimonio.facade.PatrimonioFacade;
import br.com.guaraba.patrimonio.modelo.Categoria;
import br.com.guaraba.patrimonio.modelo.Instituicao;
import br.com.guaraba.patrimonio.modelo.Lugar;
import br.com.guaraba.patrimonio.modelo.Patrimonio;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;
import javax.faces.model.SelectItem;
import org.apache.log4j.Logger;

/**
 *
 * @author marcelo
 */
@ManagedBean
@SessionScoped
public class PatrimonioController implements Serializable {

    static Logger logger = Logger.getLogger(PatrimonioController.class.getName());
    @ManagedProperty(value = "#{jsfUtil}")
    private JsfUtil jsfUtil;
    private Patrimonio patrimonio;
    @EJB
    private PatrimonioFacade patrimonioFacade;
    @EJB
    private LugarFacade lugarFacade;
    @EJB
    private CategoriaFacade categoriaFacade;
    @EJB
    private InstituicaoFacade instituicaoFacade;
    private List<Patrimonio> listaPatrimonios;

    public PatrimonioController() {
        
    }


    public JsfUtil getJsfUtil() {
        return jsfUtil;
    }

    public void setJsfUtil(JsfUtil jsfUtil) {
        this.jsfUtil = jsfUtil;
    }

    public List<Patrimonio> getListaPatrimonios() {
        return listaPatrimonios;
    }

    public void setListaPatrimonios(List<Patrimonio> listaPatrimonios) {
        this.listaPatrimonios = listaPatrimonios;
    }

    public Patrimonio getPatrimonio() {
        return patrimonio;
    }

    public void setPatrimonio(Patrimonio patrimonio) {
        this.patrimonio = patrimonio;
    }

    public PatrimonioFacade getPatrimonioFacade() {
        return patrimonioFacade;
    }

    public void setPatrimonioFacade(PatrimonioFacade patrimonioFacade) {
        this.patrimonioFacade = patrimonioFacade;
    }

    public CategoriaFacade getCategoriaFacade() {
        return categoriaFacade;
    }

    public void setCategoriaFacade(CategoriaFacade categoriaFacade) {
        this.categoriaFacade = categoriaFacade;
    }

    public void NovoPatrimonio(){
        this.patrimonio = new Patrimonio();
        patrimonio.setLugar(new Lugar());
        patrimonio.setCategoria(new Categoria());
        patrimonio.setInstituicao(new Instituicao());
    }
    public void BuscarTodosPatrimonio(){
        this.listaPatrimonios = patrimonioFacade.findAll();
    }

    public void Salvar() {
        //JOptionPane.showMessageDialog(null, "Opa");
        try {
            patrimonio.setInstituicao(instituicaoFacade.FindById(patrimonio.getInstituicao().getId()));
            patrimonio.setCategoria(categoriaFacade.findByID(patrimonio.getCategoria().getId()));
            patrimonio.setLugar(lugarFacade.findByID(patrimonio.getLugar().getId()));
            this.patrimonioFacade.create(patrimonio);
            jsfUtil.addSuccess("Patrimonio_salvo_com_sucesso");
            this.NovoPatrimonio();
        } catch (Exception ex) {
            //jsfUtil.addErro("Ocoreu_um_erro");
            JsfUtil.addErrorMessage("Erro: " + ex.getMessage() + " Cause: " + ex.getCause());
        }
    }

    public void BuscarPorNome(){
        //this.listaInstituicoes = this.instituicaoFacade.FindByNome(instituicao.getNome());
    }

    public void EditarPatrimonio(){
        try {
            this.patrimonioFacade.edit(patrimonio);
            jsfUtil.addSuccess("Patrimonio_salvo_com_sucesso");
        } catch (Exception ex) {
            jsfUtil.addErro("Ocoreu_um_erro");
        }
    }

     public List<SelectItem> getSelectPatrimonios(){
        List<Patrimonio> listaPatrimonio = this.patrimonioFacade.findAll();
        List<SelectItem> list = new ArrayList<SelectItem>();
        for(Patrimonio p:listaPatrimonio){
            list.add(new SelectItem(p.getId(), p.getNome()));
        }
        return list;
    }

}
